/*
 * Copyright (c) 2014 pkzd/1.0, 颜文泽(robin)
 * All rights reserved.
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *     1 Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     2 Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include	<param.h>

.globl _pic0
_pic0:
	pushl	$(pic0)
	jmp	traps
.globl _pic4
_pic4:
	pushl	$(pic4)
	jmp	traps
.globl _pic13
_pic13:
	pushl	$(pic13)
	jmp	traps
.globl _pic14
_pic14:
	pushl	$(pic14)
	jmp	traps0
.globl _pic15
_pic15:
	pushl	$(pic15)
	jmp traps
.globl _pic32
_pic32:
	pushl	$(pic32)
	jmp	traps
.globl _pic33
_pic33:
	pushl	$(pic33)
	jmp	traps	
.globl _pic46
_pic46:
	pushl	$(pic46)
	jmp	traps

.globl _pic80
_pic80: 
	pushl	%ds
	pushl	%es
	pushl	%esi
	pushl	%edi
	pushl	%edx
	pushl	%ecx
	pushl	%ebx
	pushl	%eax
	movw	$(KERN_DSEL), %ax
	movw	%ax, %es
	movw	%ax, %ds
	call	syscall	
	popl	%ebx
	popl	%ebx
	popl	%ecx
	popl	%edx
	popl	%edi
	popl	%esi
	popl	%es
	popl	%ds	
	iret

.globl traps
traps:
	pushl	(%esp)
	movl	$0, 4(%esp)
.globl traps0
traps0:
	pushl	%ds
	pushl	%es
	pushl	%eax
	pushl	%ebx
	pushl	%ecx
	pushl	%edx
	pushl	%esi
	pushl	%edi
	movw	$(KERN_DSEL), %ax
	movw	%ax, %es
	movw	%ax, %ds
	movl	32(%esp), %eax
	pushl	36(%esp)
	call	*%eax
	popl	%eax	
	popl    %edi
        popl    %esi
        popl    %edx
        popl    %ecx
        popl    %ebx
        popl    %eax
        popl    %es
        popl    %ds
	addl	$0x08, %esp
	iret
